package Demo02.Demo06;

import java.util.ArrayList;
import java.util.List;

public class Demo_KFC {
    //食物的种类
    String[] names = {"雪莲","小布丁","大舌头","冰粥"};
    //生成最大值，到达可以休息
    static  final  int max = 20;
    //存放食物的集合
    List<Demo_Food> foods = new ArrayList<>();
    //生成食物的方法
    public void prod(int index){
        synchronized (this){
            //如果食物大于20
            while (foods.size()>20){
                System.out.println("生成完毕");
                this.notifyAll();//这个唤醒是针对生产者和消费者，有all


                try {
                    String name =Thread.currentThread().getName();
                    this.wait();//这个唤醒是针对生产者，没有all
                    System.out.println("生产者"+name);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }// 开始生产食物食物
            System.out.println("开始生产食物");
            for (int i = 0; i < index; i++) {
                Demo_Food food = new Demo_Food(names[(int) (Math.random() * 4)]);
                foods.add(food);
                System.out.println("生产了"+food.getName()+foods.size());
            }
        }
    }
    // 消费食物的方法
    public void consu(int index) {
        synchronized (this) {
            while (foods.size() < index) {
                System.out.println("食材不够了");
                this.notifyAll();//这个唤醒是针对生产者和消费者，有all
                try {
                    String name=Thread.currentThread().getName();
                    this.wait();//这个唤醒是针对消费者，没有all
                    System.out.println("消费者："+name);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // 足够消费
            System.out.println("开始消费");
            for (int i = 0; i < index; i++) {
                Demo_Food food = foods.remove(foods.size() - 1);
                System.out.println("消费了一个" + food.getName() + foods.size());
            }
        }
    }
}



